package com.zyj.mapping;

import com.zyj.handler.SaveUserHandler;
import com.zyj.spring.aware.BeanFactoryAware;
import com.zyj.spring.factory.BeanFactory;
import com.zyj.spring.factory.support.DefaultListableBeanFactory;
import com.zyj.spring.init.InitializingBean;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

public class SimpleUrlHandlerMapping implements HandlerMapping, BeanFactoryAware, InitializingBean {
    private Map<String,Object> urlHandlers = new HashMap<>();

    /**
     * 实现了BeanFactoryAware接口，会在当前映射器在容器中进行初始化的时候，调用setBeanFactory方法注入容器
     *
     */
    // 思考：BeanFactory如何注入
    private DefaultListableBeanFactory beanFactory;

    public SimpleUrlHandlerMapping() {
        // 方式2：SimpleUrlHandlerMapping
        // <bean class="专门用来建立映射关系的类">
        //  <props>
        //    <prop key="请求URL">处理器类的全路径</prop>
        //  </props>
        // </bean>
        // TODO
        this.urlHandlers.put("/saveUser",new SaveUserHandler());
    }

    @Override
    public Object getHandler(HttpServletRequest request) {
        String uri = request.getRequestURI();
        if (uri == null || "".equals(uri)){
            return null;
        }
        return this.urlHandlers.get(uri);
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        this.beanFactory = (DefaultListableBeanFactory) beanFactory;

    }

    /**
     * 在该方法中根据以下配置方式判断bean是否符合以下配置方式，并建立url和处理器bean的映射关系
     */
    // 方式2：SimpleUrlHandlerMapping
    // <bean class="专门用来建立映射关系的类">
    //  <props>
    //    <prop key="请求URL">处理器类的全路径</prop>
    //  </props>
    // </bean>
    @Override
    public void afterPropertiesSet() {

    }
}
